﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Reflection;

namespace Jp.Nuits.ForwardProxy
{
    /// <summary>
    /// イベントログへログ出力を行うロガークラス。
    /// </summary>
    public static class Logger
    {
        #region Method
        /// <summary>
        /// ワーニングメッセージを出力する。
        /// </summary>
        /// <param name="message"></param>
        public static void Warning(string message)
        {
            try
            {
                EventLog log =
                    new EventLog()
                    {
                        Log = "Application",
                        MachineName = ".",
                        Source = Assembly.GetAssembly(typeof(ForwardProxy)).FullName
                    };
                log.WriteEntry(message, EventLogEntryType.Warning);
            }
            catch
            {
                // ignore
            }
        }
        /// <summary>
        /// 例外をワーニングメッセージとして出力する。
        /// </summary>
        /// <param name="e"></param>
        public static void Warning(Exception e)
        {
            Warning(ToString(e));
        }

        /// <summary>
        /// 例外を文字列化する。
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private static string ToString(Exception e)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append("Message:");
            builder.Append(e.Message);
            builder.Append("\r\nSource:");
            builder.Append(e.Source);
            builder.Append("\r\nStackTrace:\r\n");
            builder.Append(e.StackTrace);
            if (e.InnerException != null)
            {
                builder.Append("\r\nInnerException:\r\n");
                builder.Append(e.InnerException);
            }

            return builder.ToString();
        }
        #endregion
    }
}
